package leetcode.LinkedList;

/**
 * 多看，没做出来
 * 给定一个排序链表，删除所有含有重复数字的节点，只保留原始链表中 没有重复出现 的数字。
 *
 * 示例 1:
 *
 * 输入: 1->2->3->3->4->4->5
 * 输出: 1->2->5
 * 示例 2:
 *
 * 输入: 1->1->1->2->3
 * 输出: 2->3
 * @author MaoLin Wang
 * @date 2020/2/1020:07
 */
public class _82DeleteDuplicates {
    /**
     * T83实现了删除多余节点，如重复两个， 删除一个多余的，保留一个，重复三个，删除两个多余的，以此类推
     * @param head
     * @return
     */
    public static ListNode deleteDuplicates(ListNode head) {
        if (head==null||head.next==null){
            return head;
        }
        ListNode temp=head;
        ListNode next=head.next;
        while (next!=null){
            if (temp.next!=next){
                temp=temp.next;
            }else if (temp.val==next.val){
                temp.next=next.next;
                next=next.next;
            }else {
                next=next.next;
            }
        }
        return head;

    }

    /**
     * T82
     * @param head
     * @return
     */
    public static ListNode deleteDuplicates2(ListNode head) {
        if (head==null||head.next==null){
            return head;
        }
        ListNode dummy=new ListNode(-1);
        dummy.next =head;
        ListNode cur=dummy;

        while (cur.next!=null&&cur.next.next!=null){
            if (cur.next.val==cur.next.next.val){
                ListNode temp=cur.next;
                while (temp!=null&&temp.next!=null&&temp.val==temp.next.val){
                    temp=temp.next;
                }
                cur.next=temp.next;
            }else {
                cur=cur.next;
            }
        }
        return  dummy.next;

    }
    public static void main(String[] args) {
        ListNode l1=new ListNode(1);
        l1.next=new ListNode(1);
        l1.next.next=new ListNode(1);
        l1.next.next.next=new ListNode(2);
        l1.next.next.next.next=new ListNode(2);
        l1.next.next.next.next.next=new ListNode(3);

        ListNode node = deleteDuplicates2(l1);
        ListNode.printNode(node);
    }
}
